package fr.emn.fil.soc.gr3.restws.impl;

import interfaceGroupe2.EnvoiSujet;

import javax.persistence.EntityManager;
import javax.persistence.Query;

import fr.emn.fil.soc.gr3.entites.Sujet;
import fr.emn.fil.soc.gr3.restws.DBConnection;
import fr.emn.fil.soc.gr3.restws.ProtocoleEnseignant;
import fr.emn.fil.soc.gr3.restws.TokenUtil;

public class ProtocoleEnseignantImpl implements ProtocoleEnseignant {

	@Override
	public boolean deposerSujet(String token, String sujetXml) {
		
		int nombreDeModification = 0;
		boolean tokenValide = TokenUtil.tokenExists(token);

		if (tokenValide) {
			DBConnection dbConnection = new DBConnection();
			EntityManager em = dbConnection.createConnection();

			EnvoiSujet generateurXml = new EnvoiSujet();

			// To do, refactoring
			constructeurSujet.Sujet sujet =  generateurXml.envoiSujet(sujetXml); 
			Sujet sujetGenere = new Sujet();
			sujetGenere.setId(sujet.getId());
			sujetGenere.setTitre(sujet.getTitre());
			sujetGenere.setUv(sujet.getUv());
			sujetGenere.setEvaluation(sujet.getEvaluation());
			sujetGenere.setSujet(sujet.getSujet());
			sujetGenere.setReponse(sujet.getReponse());
			
			Query query = em
					.createQuery("INSERT INTO SUJET (uv, titre, evaluation, sujet, reponse) "
							+ "VALUES (	'" + sujetGenere.getUv() + "', '"
							+ sujetGenere.getTitre() + "', '" 
							+ sujetGenere.getEvaluation() + "', '" 
							+ sujetGenere.getSujet() + "', '" 
							+ sujetGenere.getReponse() + "')");

			try {
				nombreDeModification = query.executeUpdate();
			} catch (Exception e) {
				System.err.println(e);
			}

			dbConnection.closeConnection();
		}
		return nombreDeModification == 1;
	}

	@Override
	public boolean retirerSujet(String token, String idSujet) {
		boolean sujetRetire = false;
		boolean tokenValide = TokenUtil.tokenExists(token);

		if (tokenValide) {
			DBConnection dbConnection = new DBConnection();
			EntityManager em = dbConnection.createConnection();

			Query query = em.createQuery("DELETE FROM " + Sujet.class.getName()
					+ " s WHERE s.id=:idSujet");
			query.setParameter("idSujet", idSujet);

			try {
				int nbModif = query.executeUpdate();
				if (nbModif == 1) {
					sujetRetire = true;
				}
			} catch (Exception e) {
				System.err.println(e);
			}

			dbConnection.closeConnection();
		}
		return sujetRetire;
	}

}
